/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package classPack;

import java.awt.Toolkit;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import tela.PanelConversa;
import tela.Principal;

/**
 *
 * @author Eu
 */
public class Conversa extends Classes {

    private String titulo, nome;
    private boolean aceito;
    private Usuario admin;
    private HashMap<String, Usuario> usuarios;
    private ArrayList<Mensagem> mensagens;
//private HashMap<String, Mensagem> mensagens;
    private PanelConversa janela;

    public Conversa(String titulo) {
        setTitulo(titulo);
        usuarios = new HashMap<>();
        mensagens = new ArrayList<>();
    }

    public Conversa(String titulo, Usuario admin) {
        setTitulo(titulo);
        this.admin = admin;
        usuarios = new HashMap<>();
        mensagens = new ArrayList<>();
    }

    public void setAceito(boolean aceito) {
        this.aceito = aceito;
    }

    public boolean isAceito() {
        return aceito;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        if (nome != null) {
            this.nome = nome;
        }
    }

    public String getTitulo() {
        return titulo;
    }

    public final void setTitulo(String titulo) {
        if (titulo != null && !titulo.equals("")) {
            this.titulo = titulo;
        }
    }

    public Usuario getAdmin() {
        return admin;
    }

    public void setAdmin(Usuario admin) {
        this.admin = admin;
    }

    public PanelConversa getJanela() {
        return janela;
    }

    public void setJanela(PanelConversa janela) {
        this.janela = janela;
    }

    public void addMensagem(Mensagem novaMsg) {
        if (novaMsg != null) {
            mensagens.add(novaMsg);
            if (janela != null) {
                janela.addMensagem(novaMsg.getHtmlCode());
                if (!novaMsg.isSuaMensagem()) {
                    Toolkit.getDefaultToolkit().beep();
                }
            }
        }
    }

    public void setMensagens(ArrayList<Mensagem> mensagens) {
        this.mensagens = mensagens;
    }

    public ArrayList<Mensagem> getMensagens() {
        return mensagens;
    }

    public int getQuantidadeMsg() {
        return mensagens.size();
    }

    public void enviaMensagem(Mensagem novaMsg) {
        if (novaMsg != null) {
            addMensagem(novaMsg);
            for (Usuario user : usuarios.values()) {
                if (user.isOnline() && !user.equals(Principal.logado)) {
                    Conexao.getInstance().enviarMensagem(user, "0;" + getNome() + ";" + novaMsg.getMsg());
                }
            }
        }
    }

    public void montarTela() {
        if (janela != null) {
            for (Mensagem msg : mensagens) {
                janela.addMensagem(msg.getHtmlCode());
            }
        }
    }

    public void setUsuario(HashMap<String, Usuario> usuarios) {
        if (usuarios != null && !usuarios.isEmpty()) {
            this.usuarios = usuarios;
        }
    }

    public HashMap<String, Usuario> getUsuarios() {
        return usuarios;
    }

    public void addUsuario(Usuario novoUsuario) {
        if (novoUsuario != null) {
            usuarios.put(novoUsuario.getIpUsuario(), novoUsuario);
        }
    }

    public void delUsuario(Usuario delUsuario) {
        if (delUsuario != null && usuarios.containsKey(delUsuario.getIpUsuario())) {
            usuarios.remove(delUsuario.getIpUsuario());
        }
    }

    public boolean isSingleUser() {
        return (usuarios.size() == 1);
    }

    public boolean isSingleUserOnline() {
        Usuario single;
        Object usus[] = usuarios.values().toArray();
        single = (Usuario) usus[0];
        return single.isOnline();
    }

    public Usuario getSingleUser() {
        if (!isSingleUser()) {
            return null;
        }
        Usuario single;
        Object usus[] = usuarios.values().toArray();
        single = (Usuario) usus[0];
        return single;
    }

    public void apagarHistorico() {
        mensagens = new ArrayList<>();
        montarTela();
    }

    @Override
    public String toString() {
        return getTitulo();
    }

    public void gerarNome() {
        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd_hh_mm_ss");
        if (isSingleUser()) {
            setNome("unica_" + getTitulo());
        } else {
            String nomeTemp = "grupo_" + getTitulo();
            Date hoje = new Date();
            nomeTemp += dateFormat.format(hoje);
            setNome(nomeTemp);
        }
    }
}
